<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//Ultima verificación: 07-11-2014 ; 23-11-2014 ; 23-02-2015
class Usuario extends CI_Controller {
	//Metodo constructor de la clase
	function __construct(){
		parent::__construct();
		
        //Cargamos el helper de las cookies para recordar el usuario.
		$this->load->helper('cookie');
	}
	
	//Ultima comprobacion: 28-10-2014
	//Este es el metodo que se llama cuando una persona quiere iniciar sesion en el sistema
	function iniciarSesion(){
		//Valido los datos enviados desde el login del sistema
		//Los dos campos no deben estar vacios y el password debe ser de almenos seis caracteres
		if($this->input->post('nombreUsuario',true) && $this->input->post('passwordUsuario',true) && strlen($this->input->post('passwordUsuario',true))>=6){
			//Cargo el modelo donde estan los datos de los usuarios registrados para hacer la validacion
			$this->load->model('m_usuario');
			
            //Validar el usuario contra la base de datos. Tanto el usuario como la persona deben estar activos.
			$usuario = $this->m_usuario->validarUsuario($this->input->post('nombreUsuario', true), $this->input->post('passwordUsuario', true));
			
			//Si existe un usuario con los datos que pasamos entonces registro sus datos
			//en la sesión, si no existe, cargo la vista del login con un mensaje de error.
			if($usuario->num_rows() == 1){
				$this->session->set_userdata('sesionIniciada', 'Si');
				$this->session->set_userdata('idUsuarioLog', $usuario->row()->idUsuario);
				$this->session->set_userdata('idPersonaLog', $usuario->row()->idPersona);
				$this->session->set_userdata('nombreUsuarioLog', $usuario->row()->nombre);
				$this->session->set_userdata('fechaUltimoAccesoUsuarioLog', $usuario->row()->fechaUltimoAcceso);
				$this->session->set_userdata('fechaUltimoCierreUsuarioLog', $usuario->row()->fechaUltimoCierre);
				//$this->session->set_userdata('estadoChat', $usuario->row()->estadoChat);
				
				//Permisos del usuario
				$this->session->set_userdata('permisoAlumno', $usuario->row()->alumno);
				$this->session->set_userdata('permisoTutor', $usuario->row()->tutor);
				$this->session->set_userdata('permisoDocente', $usuario->row()->docente);
				$this->session->set_userdata('permisoDirector', $usuario->row()->director);
				$this->session->set_userdata('permisoVicedirector', $usuario->row()->vicedirector);
				$this->session->set_userdata('permisoPreceptor', $usuario->row()->preceptor);
				$this->session->set_userdata('permisoSecretario', $usuario->row()->secretario);
				$this->session->set_userdata('permisoAdministrador', $usuario->row()->administrador);
				
				//Cargo el modelo donde estan los datos de las personas----------------------------------------------------------------------------------
				$this->load->model('m_persona');
				
				//Busco los datos de la persona que inicio sesion
				$persona = $this->m_persona->get($usuario->row()->idPersona);
				
				//Guardo los datos de la persona en variables de sesion
				$this->session->set_userdata('apellidoPersonaLog', $persona->row()->apellido);
				$this->session->set_userdata('nombrePersonaLog', $persona->row()->nombre);
				//Esto se desactivo porque una persona al cambiarse su propia foto, generaba un error.
				//$this->session->set_userdata('hashFotoPersonaLog', $persona->row()->hashArchivoFoto);
				
				//Si la persona es TUTOR busco el id del mismo-------------------------------------------------------------------------------------------
				if($usuario->row()->tutor == 1){
					//Cargo el modelo donde estan los datos de los tutores
					$this->load->model('m_tutor');
					
					//Busco los datos del tutor que inicio sesion. Debe ser un tutor activo.
					$tutor = $this->m_tutor->getActivo($usuario->row()->idPersona);
					
					//Si la consulta devolvio un registro lo guardo en la sesion
					if($tutor->num_rows() == 1){
						$this->session->set_userdata('idTutorLog', $tutor->row()->idTutor);					
					}
				}
				
				//Si la persona es ALUMNO busco el id del mismo-------------------------------------------------------------------------------------------
				if($usuario->row()->alumno == 1){
					//Cargo el modelo donde estan los datos de los alumnos
					$this->load->model('m_alumno');
					
					//Busco los datos del alumno que inicio sesion. Debe ser un alumno activo.
					$alumno = $this->m_alumno->getActivo($usuario->row()->idPersona);
					
					//Si la consulta devolvio un registro lo guardo en la sesion
					if($alumno->num_rows() == 1){
						$this->session->set_userdata('idAlumnoLog', $alumno->row()->idAlumno);
					}
				}
				
				//Si la persona es DOCENTE busco el id del mismo-------------------------------------------------------------------------------------------
				if($usuario->row()->docente == 1){
					//Cargo el modelo donde estan los datos de los docentes
					$this->load->model('m_docente');
					
					//Busco los datos del docente que inicio sesion. Debe ser un docente activo.
					$docente = $this->m_docente->getActivo($usuario->row()->idPersona);
					
					//Si la consulta devolvio un registro lo guardo en la sesion
					if($docente->num_rows() == 1){
						$this->session->set_userdata('idDocenteLog', $docente->row()->idDocente);
					}
				}
				
				//Si la persona es DIRECTIVO busco el id del mismo-------------------------------------------------------------------------------------------
				if($usuario->row()->director == 1){
					//Cargo el modelo donde estan los datos de los directivos
					$this->load->model('m_directivo');
					
					//Busco los datos del directivo que inicio sesion
					$directivo = $this->m_directivo->getActivo($usuario->row()->idPersona);
					
					//Si la consulta devolvio un registro lo guardo en la sesion
					if($directivo->num_rows() == 1){
						$this->session->set_userdata('idDirectivoLog', $directivo->row()->idDirectivo);
					}
				}
												
				//Actualizo la fecha de ultimo acceso del usuario logeado
				$this->m_usuario->actualizarFechaUltimoAcceso($usuario->row()->idUsuario);
				
				//Si el usuario apreto recordar usuario genero las cookies en el navegador.
				if($this->input->post('recordarUsuario') == "on"){
					set_cookie('nombreUsuario', $this->input->post('nombreUsuario', true),604800);
					set_cookie('passwordUsuario',$this->input->post('passwordUsuario', true),604800);
				}
				
				//Guardo en la auditoria que alguien ingreso al sistema correctamente - Que, quien, donde y como
				$this->m_auditoria->crear(6, $usuario->row()->idUsuario, $_SERVER['REMOTE_ADDR'],'InicioSesionCorrecto');
				
                //El usuario es correcto lo redirigimos al PANEL DE CONTROL
				redirect(site_url("inicio"));
			}else{
				//Guardo en la auditoria que alguien ingreso al sistema incorrectamente - Que, quien, donde y como
				$this->m_auditoria->crear(7, 0, $_SERVER['REMOTE_ADDR'],'InicioSesionIncorrecto - Usuario: ' . $this->input->post('nombreUsuario',true) . ", Password: ". $this->input->post('passwordUsuario',true));
				
				//Cargo la vista con un mensaje de error para mostrar
				$datos["error"]=true;
				$datos["mensajeError"] = "Su usuario y/o contrase&ntilde;a son incorrectos.";
				$this->load->view('login', $datos);
			}
		}else{
			//Si no llegan variables de POST
			//Destruimos la sesion por las dudas
			$this->session->sess_destroy();
			//Y mostramos un mensaje de que esta tratando de entrar a una pagina inexistente
			//show_404();
			
			 //Le paso a la vista login que no existe un error o mensaje para mostrar
			$datos['error'] = false;
			$this->load->view('login', $datos);
		}
	}
	
	//Cuando se cierra sesion hay que destruir la sesion y llevar al usuario a la pantalla de login
	//Ultima Verificación: 06/10/2014
	function cerrarSesion(){
        //Cargo el modelo donde estan los datos de los usuarios registrados para actualizar la fecha de cierre de sesion
		$this->load->model('m_usuario');
		
		//Actualizo la fecha de ultimo cierre del usuario logeado
		$this->m_usuario->actualizarFechaUltimoCierre($this->session->userdata('idUsuarioLog'));
		
		//Guardo en la auditoria que el usuario cerro sesion correctamente - Que, quien, donde y como
		$this->m_auditoria->crear(8, $this->session->userdata('idUsuarioLog'), $_SERVER['REMOTE_ADDR'],'CierreSesion');
		
		//Destruimos la sesion
		$this->session->sess_destroy();		
		
        //Le paso a la vista login que no existe un error o mensaje para mostrar
		$datos['error'] = false;
		$this->load->view('login', $datos);
	}
	
	//Funcion interna para calcular la edad de una persona
	function _CalculaEdad($fecha){
		list($Y,$m,$d) = explode("-",$fecha);
		return(date("md") < $m.$d ? date("Y")-$Y-1 : date("Y")-$Y);
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todos los usuarios activos o inactivos pero NO los borrados (-1)
	function consultar(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){
			//Cargo el modelo donde estan los datos de los usuarios registrados para pedirle un listado con todos ellos
			$this->load->model('m_usuario');
			
			//Busco todos los usuarios activos o inactivos, pero no los borrados.
			$listadoUsuarios = $this->m_usuario->buscar();
			
			//Le paso el listado de todos los usuarios a la vista para que los muestre en una tabla
			$datos['usuarios'] = $listadoUsuarios;
			
			//Cargo la vista donde se muestra la tabla de usuarios y la guardo en una variable para pasarsela a la vista principal
			$datosPrincipal['vista'] = $this->load->view('v_usuarios', $datos, true);
			
			//Cargo la vista principal con los datos de la vista recien generada
			$this->load->view('v_sistema', $datosPrincipal);
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo solo se puede llamar con ajax
	//Sirve para eliminar al usuario pasado por la url
	function eliminar($idUsuario=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){
			//Segunda comprobacion: Que idUsuario pasado sea numerico y mayor que cero.
			if(is_numeric($idUsuario) && $idUsuario>0){
				//Cargo el modelo donde estan los datos de los usuarios registrados
				$this->load->model('m_usuario');
				
				//Busco al usuario que hay que eliminar para comprobar que existe.
				$usuario = $this->m_usuario->get($idUsuario);
				
				//Tercera comprobacion: Que el usuario pasado por la url sea existente
				if($usuario->num_rows() == 1){
					//Elimino al usuario pasado por la url
					$respuesta = $this->m_usuario->eliminar($idUsuario, $this->session->userdata('idUsuarioLog'));
					
					//Busco todos los usuarios activos o inactivos, pero no los borrados que quedaron.
					$listadoUsuarios = $this->m_usuario->buscar();
					
					//Le paso el listado de todos los usuarios a la vista para que los muestre en una tabla
					$datos['usuarios'] = $listadoUsuarios;
					
					//Cargo la vista donde se muestra la tabla de usuarios
					$this->load->view('v_usuarios', $datos);
				} else {
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					echo("No existe el registro seleccionado para borrar.");
				}
			} else {
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				echo("No se ha pasado los parametros necesarios para borrar un registro.");
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			echo("No tiene permiso para borrar un registro.");
		}
	}
	
	//Este metodo solo se puede llamar con ajax. Este metodo devuelve un nombre de usuario que pueda ser usado segun el nombre y apellido de la persona.
	//Se usa al crear una persona, para completar el nombre de usuario automaticamente.
	function completarUsuario(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){
			//Segunda comprobacion: Que se haya pasado un apellido y un nombre
			if($this->input->post('apellido',true)!="" && $this->input->post('nombre',true)!=""){
				//Cargo el modelo donde estan los datos de los usuarios registrados
				$this->load->model('m_usuario');
				
				$i=0;
				do{
					$i++;
					
					//Armo el usuario candidato
					$usuario = strtolower(substr($this->input->post('nombre',true),0,$i).$this->input->post('apellido',true));
					
					//Compruebo si el usuario armado existe
					$existeUsuario = $this->m_usuario->existeUsuario($usuario);
				
				}while($existeUsuario==1 && $i<=strlen($this->input->post('nombre',true)));
				
				echo($usuario);
			}
		}
	}
	
	//Este metodo solo se puede llamar con ajax. Este metodo se utiliza para saber si un nombre de usuario ya esta repetido o no.
	//Este metodo se usa al crear una persona.
	function comprobarUsuario(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){
			//Segunda comprobacion: Que se haya pasado un nombre de usuario por post
			if($this->input->post('usuario',true)!=""){
				//Cargo el modelo donde estan los datos de los usuarios registrados
				$this->load->model('m_usuario');
				
				//Compruebo si el usuario armado existe
				$existeUsuario = $this->m_usuario->existeUsuario($this->input->post('usuario',true));
				
				if($existeUsuario == 1)	echo("usuarioRepetido");
				else 					echo("usuarioNoRepetido");
			}else{
				echo("usuarioRepetido");
			}
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo realmente modifica los datos de un usuario
	function modificar($idUsuario=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){	   
			//Segunda comprobacion: Que se haya pasado por post los permisos existentes y el estado del usuario a modificar.
			//Ademas que se haya pasado por la url el id del usuario a modificar
			if(is_numeric($idUsuario) && $idUsuario>0 && ($this->input->post('permisoDirectivo',true) == '1' || $this->input->post('permisoDirectivo',true) == '0') && ($this->input->post('permisoDocente',true) == '1' || $this->input->post('permisoDocente',true) == '0') && ($this->input->post('permisoAlumno',true) == '1' || $this->input->post('permisoAlumno',true) == '0') && ($this->input->post('permisoTutor',true) == '1' || $this->input->post('permisoTutor',true) == '0') && ($this->input->post('estadoUsuario',true) == '1' || $this->input->post('estadoUsuario',true) == '0')){		
				//Cargo el modelo donde estan los datos de los usuarios
				$this->load->model('m_usuario');
				
				//Busco al usuario para corroborar que existe
				$usuario = $this->m_usuario->get($idUsuario);
				
				//Tercera comprobacion: Que el usuario pasado por la url sea existente
				if($usuario->num_rows() == 1){
					//Modificamos el usuario
					$resultado = $this->m_usuario->modificar($idUsuario,
															 $this->input->post('permisoAlumno',true),
															 $this->input->post('permisoTutor',true),
															 $this->input->post('permisoDocente',true),
															 $this->input->post('permisoDirectivo',true),
															 $this->input->post('permisoDirectivo',true),
															 $this->input->post('permisoDirectivo',true),
															 $this->input->post('permisoDirectivo',true),
															 $this->input->post('estadoUsuario',true));
					if($resultado == 1){
						echo("<script> alert('El usuario se ha modificado correctamente.');</script>");
					}else{
						echo("<script> alert('El usuario no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
					}
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo setea el password del usuario a su numero de documento
	function resetearPassword($idUsuario=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){	   
			//Segunda comprobacion: Que se haya pasado por la url el id del usuario a resetearle el password
			if(is_numeric($idUsuario) && $idUsuario>0){
				//Cargo el modelo donde estan los datos de los usuarios
				$this->load->model('m_usuario');
				
				//Busco al usuario para corroborar que existe
				$usuario = $this->m_usuario->get($idUsuario);
				
				//Tercera comprobacion: Que el usuario pasado por la url sea existente
				if($usuario->num_rows() == 1){
					//El usuario tiene que tener cargado su numero de documento y debe ser un numero de mas de 6 caracteres
					if($usuario->row()->numeroDocumento!="" && strlen($usuario->row()->numeroDocumento)>=6){
						//Reseteamos el password al usuario con su numero documento.
						$resultado = $this->m_usuario->resetearPassword($idUsuario,	$usuario->row()->numeroDocumento);
						
						if($resultado == 1){
							echo("<script> alert('Se ha reseteado el password correctamente.');</script>");
						}else{
							echo("<script> alert('El password no se ha reseteado. Ha habido un error o los datos permanecieron iguales.');</script>");
						}
					}else{
						echo("<script> alert('El password no se ha reseteado. El usuario no tiene cargado su n\u00famero de documento.');</script>");					
					}
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo crea un usuario si no existe y si existe, lo modifica.
	function actualizar($idPersona=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){	   
			//Segunda comprobacion: Que se haya pasado por post el nombre, el password, los permisos y el estado del usuario a crear o modificar.
			//Ademas que se haya pasado por la url el id de la persona a crear o modificar el usuario
			if(is_numeric($idPersona) && $idPersona>0 && ($this->input->post('permisoDirectivo',true) == '1' || $this->input->post('permisoDirectivo',true) == '0') && ($this->input->post('permisoDocente',true) == '1' || $this->input->post('permisoDocente',true) == '0') && ($this->input->post('permisoAlumno',true) == '1' || $this->input->post('permisoAlumno',true) == '0') && ($this->input->post('permisoTutor',true) == '1' || $this->input->post('permisoTutor',true) == '0') && ($this->input->post('estadoUsuario',true) == '1' || $this->input->post('estadoUsuario',true) == '0')){		
				//Cargo el modelo donde estan los datos de las personas
				$this->load->model('m_persona');
				
				//Busco a la persona para corroborar que exista
				$persona = $this->m_persona->get($idPersona);
				
				//Tercera comprobacion: Que la persona pasada por la url sea existente
				if($persona->num_rows() == 1){
					//Cargo el modelo donde estan los datos de los usuarios
					$this->load->model('m_usuario');
					
					//Busco al usuario para corroborar si existe o no
					$usuario = $this->m_usuario->get2($idPersona);
					
					//Cuarta comprobacion: Si la persona ya es usuario, modifico los datos, caso contrario, lo creo.
					//IMPORTANTE!!! A ESTA RAMA NO DEBERIA ENTRAR NUNCA LA EJECUCION, YA QUE SI ES USUARIO SE LLAMA DIRECTAMENTE AL METODO MODIFICAR ANTERIOR.
					//SOLO SE USARIA LA RAMA DEL ELSE CUANDO EL USUARIO DE LA PERSONA HA SIDO BORRADO.
					if($usuario->num_rows() == 1)
						//Modificamos el usuario
						$resultado = $this->m_usuario->modificar($usuario->row()->idUsuario,
																 $this->input->post('permisoAlumno',true),
																 $this->input->post('permisoTutor',true),
																 $this->input->post('permisoDocente',true),
																 $this->input->post('permisoDirectivo',true),
																 $this->input->post('permisoDirectivo',true),
																 $this->input->post('permisoDirectivo',true),
																 $this->input->post('permisoDirectivo',true),
																 $this->input->post('estadoUsuario',true));
					else
						if($this->input->post('nombreUsuario',true) != "" && $this->input->post('password',true) != "" && strlen($this->input->post('password',true))>=6){
							//Creamos el usuario
							$resultado = $this->m_usuario->crear($idPersona,
																 $this->input->post('nombreUsuario',true),
																 $this->input->post('password',true),
																 $this->input->post('permisoAlumno',true),
																 $this->input->post('permisoTutor',true),
																 $this->input->post('permisoDocente',true),
																 $this->input->post('permisoDirectivo',true),
																 $this->input->post('permisoDirectivo',true),
																 $this->input->post('permisoDirectivo',true),
																 $this->input->post('permisoDirectivo',true),
																 0,
																 $this->input->post('estadoUsuario',true),
																 $this->session->userdata('idUsuarioLog'));
						}					
					if($resultado == 1){
						echo("<script> alert('El usuario se ha modificado correctamente.');</script>");
					}else{
						echo("<script> alert('El usuario no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
					}
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra el perfil del usuario logueado
	//Ultima verificación: 12-10-2014 ; 28-10-2014
	function miPerfil(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion. No se requiere permisos adicionales ya que todos tienen perfil.
		if($this->session->userdata('sesionIniciada') == 'Si'){
			//Segunda comprobacion: Que las variables de sesion de usuario y de persona esten inicializadas
			if(is_numeric($this->session->userdata('idUsuarioLog')) && $this->session->userdata('idUsuarioLog')>0 && 
			   is_numeric($this->session->userdata('idPersonaLog')) && $this->session->userdata('idPersonaLog')>0){
				//Cargo el modelo donde estan los datos de los usuarios registrados para buscar la informacion del usuario
				$this->load->model('m_usuario');
				
				//Busco los datos del usuario logeado
				$usuarioLog = $this->m_usuario->get($this->session->userdata('idUsuarioLog'));
				
				//Le paso los datos del usuario a la vista
				$datos['usuarioLog'] = $usuarioLog;
				
				//Cargo el modelo donde estan los datos de las personas
				$this->load->model('m_persona');
				
				//Busco los datos de la persona que inicio sesion
				$personaLog = $this->m_persona->get($this->session->userdata('idPersonaLog'));
				
				//Le paso la persona a la vista
				$datos['personaLog'] = $personaLog;
				
				//Cargo la vista donde se muestra el perfil del usuario logeado y la guardo en una variable para pasarsela a la vista principal
				$datosPrincipal['vista'] = $this->load->view('v_perfil', $datos, true);
				
				//Cargo la vista principal con los datos de la vista perfil
				$this->load->view('v_sistema', $datosPrincipal);
			} else {
				//El usuario no tiene permiso para realizar esta accion.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo abre la pantalla para que el usuario pueda modificar el password.
	function abrirPantallaModificarPassword(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		//Todas los usuarios pueden actualizar su password por lo que no se requieren permisos extras.
		if($this->session->userdata('sesionIniciada') == 'Si'){
			//Segunda comprobacion: Que las variables de sesion de usuario y de persona esten inicializadas
			if(is_numeric($this->session->userdata('idUsuarioLog')) && $this->session->userdata('idUsuarioLog')>0 && 
			   is_numeric($this->session->userdata('idPersonaLog')) && $this->session->userdata('idPersonaLog')>0){
				//Cargo la vista donde se muestra el formulario para modificar el password del usuario y la guardo en una variable para pasarsela a la vista principal
				$datosPrincipal['vista'] = $this->load->view('v_usuarios_modificarPassword', "", true);
				
				//Cargo la vista principal con los datos de la vista para modificar el password
				$this->load->view('v_sistema', $datosPrincipal);
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo realmente modifica el password del usuario
	function modificarPassword(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		//Todas los usuarios pueden actualizar su password por lo que no se requieren permisos extras.
		if($this->session->userdata('sesionIniciada') == 'Si'){
			//Segunda comprobacion: Que las variables de sesion de usuario y de persona esten inicializadas
			//Ademas que se haya pasado por post el password actual, nuevo password y el password repetido a modificar.
			if(is_numeric($this->session->userdata('idUsuarioLog')) && $this->session->userdata('idUsuarioLog')>0 && 
			   is_numeric($this->session->userdata('idPersonaLog')) && $this->session->userdata('idPersonaLog')>0 && 
			   $this->input->post('passwordActual',true) != "" && strlen($this->input->post('passwordActual',true))>=6 && 
			   $this->input->post('nuevoPassword',true) != "" && strlen($this->input->post('nuevoPassword',true))>=6 &&
			   $this->input->post('repetirPassword',true) != "" && strlen($this->input->post('repetirPassword',true))>=6 &&
			   $this->input->post('repetirPassword',true) == $this->input->post('nuevoPassword',true)){
				//Cargo el modelo donde estan los datos de los usuarios
				$this->load->model('m_usuario');
				
				//Busco al usuario que hay que modificarle el password
				$usuario = $this->m_usuario->get($this->session->userdata('idUsuarioLog'));
				
				//Tercera comprobacion: Que el usuario logueado sea existente
				if($usuario->num_rows() == 1){
					//Verificamos que el password actual pasado por post sea igual al que tiene el usuario actualmente
					if($usuario->row()->password == md5($this->input->post('passwordActual',true)) || $usuario->row()->passwordAlt == md5($this->input->post('passwordActual',true))){					
						//Modificamos el password
						$resultado = $this->m_usuario->modificarPassword($this->session->userdata('idUsuarioLog'), $this->input->post('nuevoPassword',true));
						
						if($resultado == 1){
							echo("<script> alert('El password se ha modificado correctamente.');</script>");
						}else{
							echo("<script> alert('El password no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
						}
					}else{
						echo("<script> alert('El password no se ha modificado ya que el password actual ingresado no es correcto.');</script>");					
					}
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Este metodo NO se puede llamar con ajax
	//Sirve para que un tutor se loguee como alguno de sus hijos o bien que se vuelva a loguear solo como el.
	function login($idAlumno=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && $this->session->userdata('permisoTutor') == '1'){
			//Segunda comprobacion: Que se hayan inicializado las variables de sesion del tutor.
			if(is_numeric($this->session->userdata('idTutorLog')) && $this->session->userdata('idTutorLog')>0){
				//Tercera comprobacion: Que idAlumno pasado sea numerico y mayor que cero. Igual que cero quiere decir que debe volverse a loguear como el tutor.
				if(is_numeric($idAlumno) && $idAlumno>=0){
					//Cargo el modelo donde estan los datos de los alumnos registrados
					$this->load->model('m_alumno');
					
					//Busco al alumno para comprobar que exista.
					$alumno = $this->m_alumno->get($idAlumno);
					
					//Cargo el modelo donde estan los datos de los tutores registrados
					$this->load->model('m_tutor');
					
					//Busco al tutor para comprobar que exista.
					$tutor = $this->m_tutor->get($this->session->userdata('idTutorLog'));
					
					//Cargo el modelo donde estan los datos de las tutelas registradas
					$this->load->model('m_tutorxalumno');
					
					//Verifico que el tutor sea realmente tutor del alumno
					$tutela = $this->m_tutorxalumno->get2($this->session->userdata('idTutorLog'), $idAlumno);
					
					//Tercera comprobacion: Que el tutor sea existente. Que el alumno pasado por la url sea existente o bien igual a cero.
					if($tutor->num_rows() == 1 && ($alumno->num_rows() == 1 || $idAlumno == 0) && ($tutela->num_rows() == 1 || $idAlumno == 0)){						
						if($idAlumno!=0){
							$this->session->set_userdata('permisoAlumno', 1);
							$this->session->set_userdata('idAlumnoLog', $idAlumno);
							//$this->session->set_userdata('idPersonaLog', $alumno->row()->idPersona);
							
							$this->session->set_userdata('apellidoPersonaLog', $alumno->row()->apellido);
							$this->session->set_userdata('nombrePersonaLog', $alumno->row()->nombre);
							$this->session->set_userdata('hashFotoTutela', $alumno->row()->hashArchivoFoto);
						}else{
							$this->session->set_userdata('permisoAlumno', 0);
							$this->session->set_userdata('idAlumnoLog', 0);
							//$this->session->set_userdata('idPersonaLog', $tutor->row()->idPersona);
							
							$this->session->set_userdata('apellidoPersonaLog', $tutor->row()->apellido);
							$this->session->set_userdata('nombrePersonaLog', $tutor->row()->nombre);
							$this->session->set_userdata('hashFotoTutela', "");
						}
						
						redirect(site_url("inicio"));
					} else {
						//El registro no existe.
						//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
						$this->session->sess_destroy();
						echo("No existe el registro.");
					}
				} else {
					//No se han pasado los parametros necesarios para cambiar de usuario logueado.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					echo("No se ha pasado los parametros necesarios cambiar de login.");
				}
			} else {
				//El usuario no tiene permiso para realizar esta accion.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				echo("No tiene permiso para cambiar de login.");
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			echo("No tiene permiso para cambiar de login.");
		}
	}
	
	/* End of file usuario.php */
	/* Location: ./application/controllers/usuario.php */
}